import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

/**
 * 文件上传记录
 */


export class FileEntityBase {
  _id?: string;
  /** 文件基类 */
  t?: FileEntityType;
  /** 文件名 */
  name?: string;
  /** 文件大小 */
  size?: number;
  /** 文件类型 */
  type?: string;
  /** 团队 ID */
  teamId?: number;
  /** 用户 ID */
  userId?: number;
  /** 项目 ID */
  projectId?: string;
  /** 模块module/action */
  route?: string;
  /** 文件路径 */
  path?: string;
  /** 标签 */
  tags?: string[];
  /** 宽度 */
  w?: number;
  /** 高度 */
  h?: number;
  /** 文件哈希值 */
  hash?: string;
  /** 状态 */
  status?: FileStatus;
  /** 封面图 */
  poster?: string;
  /** 创建时间 */
  create_time?: number;
  /** 更新时间 */
  update_time?: number;
  /** 唯一标识符 */
  uid?: string;
  /** 持久化 ID */
  persistentId?: string;
  /** 格式状态 */
  format_status?: number;
  /** 格式信息 */
  format_info?: FileFormatInfo;
}

@Entity({
  name: 'file',
})
export class FileEntity {
  @PrimaryGeneratedColumn()
  id?: number;
  @Column({ type: 'tinyint', width: 2, default: 0 })
  t?: number;
  @Column({ nullable: true })
  name?: string;
  @Column({ width: 11, default: 0 })
  size?: number;
  @Column({ nullable: true, width: 11 })
  tag_id?: number;
  @Column({ nullable: true, length: 45 })
  type?: FileEntityFileType;
  @Column({ nullable: true, width: 11 })
  shop_id?: number;
  @Column({ nullable: true, width: 11 })
  user_id?: number;
  @Column({ nullable: true, width: 11 })
  member_id?: number;
  @Column({ nullable: true, length: 45 })
  module?: string;
  @Column({ nullable: false, default: 0, width: 11 })
  w?: number;
  @Column({ nullable: false, default: 0, width: 11 })
  h?: number;
  @Column({ nullable: true })
  hash?: string;
  @Column({ type: 'tinyint', width: 2, default: 0 })
  status?: FileStatus;
  /** 视频封面 */
  @Column({ nullable: true, length: 100 })
  pic?: string;
  @Column({ nullable: true, length: 45 })
  client?: string;
  @Column({ type: 'bigint', width: 13 })
  create_time?: number;
  @Column({ type: 'bigint', width: 13 })
  update_time?: number;
  @Column({ nullable: true, comment: '防止重复' })
  uid?: string;
  /** 转码进度查询id */
  @Column({ nullable: true })
  persistentId?: string;
  @Column({ type: 'tinyint', width: 1, default: 0 })
  format_status?: 0 | 1;
  @Column({ nullable: true, type: 'json' })
  format_info?: FileFormatInfo;
  // 扩展
  create_time_str?: string;
}

export interface FileFormatInfo {
  code?: number;
  p320?: FileFormatInfoItem;
  /**
   * 默认
   */
  p720?: FileFormatInfoItem;
  p1080?: FileFormatInfoItem;
}

interface FileFormatInfoItem {
  cmd?: string;
  code?: number;
  hash?: string;
  key?: string;
  /** 转换后的播放地址 */
  url?: string;
}

/**
 * 文件记录类型
 * 1 图片
 * 2 视频
 * 3 音频
 * 4 文件
 */
export enum FileEntityType {
  'image' = 1,
  'video' = 2,
  'audio' = 3,
  'file' = 4,
}

/**
 * 文件类型
 */
export enum FileEntityFileType {
  'video/mp4' = 'video/mp4',
  'image/jpeg' = 'image/jpeg',
  'image/png' = 'image/png',
  'audio/aac' = 'audio/aac',
}

export enum FileStatus {
  /* 已创建 */
  'created' = 0,
  /* 已上传 */
  'uploaded' = 1,
}
